#include <microDS18B20.h>
#include "DHT.h"

long previousMillis = 0; 
long intervalDay = 120000;
long intervalNight = 60000;
bool lightflag=1;

#define PINLIGHTS 0
MicroDS18B20<1> sensor;
#define PINDHT 2  //датчик влажности и темп.
#define DHTTYPE DHT11   //тип датчика влажности и темп. DHT 11
#define PINMOISTS 0  //аналоговый
#define PINLIGHT 5 //свет
#define PINFAN 6   //вентилятор
#define PINPUMP 7 //помпа
DHT dht(PINDHT, DHTTYPE);

void setup() {
  Serial.begin(115200);
  delay(512);
  Serial.println();
  pinMode(PINLIGHTS,INPUT);   //датчик темноты
  pinMode(PINMOISTS,INPUT);   //влажность почвы
  pinMode(PINLIGHT,OUTPUT);   //свет
  pinMode(PINPUMP,OUTPUT);   //помпа
  pinMode(PINFAN,OUTPUT);   //вентилятор
  digitalWrite(PINFAN, HIGH);  //заранее отключаем вентилятор
  digitalWrite(PINPUMP, HIGH);  //заранее отключаем помпу
  digitalWrite(PINLIGHT, LOW); //заранее включаем свет
  Serial.println("Свет включен");
  dht.begin();
}
void loop() {
  int lightsensor_data = digitalRead(PINLIGHTS); // считываем датчик света 
  int moistsensor_data= analogRead(PINMOISTS);  //считываем датчик влажности почвы
  float h = dht.readHumidity(); //считываем датчик влажности воздуха 19
  
  //Serial.print("Значение датчика воздуха:  ");
  // Serial.println(t);
  // Serial.println(h);

  sensor.requestTemp(); //считываем температуру почвы
  delay(1000);
  //if (sensor.readTemp()) Serial.println(sensor.getTemp());
  //else Serial.println("error"); 
  float groundtemp_data = sensor.getTemp();
  float airtemp = dht.readTemperature(); //считываем датчик температуры воздуха 30
  int max_airtemp= 30;
    if (groundtemp_data>max_airtemp){
    digitalWrite(PINFAN, LOW); //включаем вентилятор, если температру а выше 30
    Serial.println("fan on");
    delay(3000);
  }
  else {
    digitalWrite(PINFAN, HIGH);
    //Serial.println("fan off");
    delay(3000);
  }
    
   //работа помпы
      Serial.print("Значение датчика влажности:  ");
   Serial.println(moistsensor_data);

   //0...300 - сухая почва*
   //300...500 - увлажнённая почва*
   //500...800 - влажная почва*
  if  ((moistsensor_data<300)&&(moistsensor_data>100)) {
   Serial.print("Значение датчика влажности:  ");
   Serial.println(moistsensor_data);
   digitalWrite(PINPUMP, LOW);
   //Serial.println("pump");
   delay(5000);
   digitalWrite(PINPUMP, HIGH);
  }
  //else {
  //digitalWrite(PINPUMP, HIGH);
  //}

  //работа светодиодов
  /*
  Serial.print("Время сейчас  ");
  Serial.println(currentMillis);
  Serial.print("Время последнее  ");
  Serial.println(previousMillis);
  Serial.print("Флаг:  ");
  Serial.println(lightflag);
  */
    unsigned long currentMillis=millis();
  if ((lightflag==1) && (currentMillis - previousMillis > intervalDay)) {
    previousMillis=currentMillis;
    Serial.println("Свет выключен");
    digitalWrite(PINLIGHT, HIGH);
    lightflag=0;
    delay(5000);

  }
  if ((lightflag==0) && (currentMillis - previousMillis > intervalNight)) {
    previousMillis=currentMillis;
    digitalWrite(PINLIGHT, LOW);
    Serial.println("Свет включен");
    lightflag=1;
    delay(5000);
  }
  
}
